package com.example.demo.mapper.system;

import com.example.demo.dto.system.SubsystemQueryDTO;
import com.example.demo.entity.system.SysSubsystem;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 子系统数据访问层
 */
@Mapper
public interface SysSubsystemMapper {
    
    /**
     * 查询子系统列表
     *
     * @param subsystem 子系统信息
     * @return 子系统集合
     */
    List<SysSubsystem> selectSubsystemList(SysSubsystem subsystem);
    
    /**
     * 分页查询子系统列表
     *
     * @param queryDTO 查询参数
     * @return 子系统集合
     */
    List<SysSubsystem> selectSubsystemPage(SubsystemQueryDTO queryDTO);
    
    /**
     * 查询子系统总数
     *
     * @param queryDTO 查询参数
     * @return 总数
     */
    long selectSubsystemCount(SubsystemQueryDTO queryDTO);
    
    /**
     * 根据系统编码查询子系统
     *
     * @param systemCode 系统编码
     * @return 子系统对象
     */
    SysSubsystem selectSubsystemByCode(String systemCode);
    
    /**
     * 新增子系统
     *
     * @param subsystem 子系统信息
     * @return 影响行数
     */
    int insertSubsystem(SysSubsystem subsystem);
    
    /**
     * 修改子系统
     *
     * @param subsystem 子系统信息
     * @return 影响行数
     */
    int updateSubsystem(SysSubsystem subsystem);
    
    /**
     * 修改子系统状态
     *
     * @param systemCode 系统编码
     * @param status 状态
     * @return 影响行数
     */
    int updateSubsystemStatus(@Param("systemCode") String systemCode, @Param("status") Integer status);
    
    /**
     * 修改子系统显示顺序
     *
     * @param systemCode 系统编码
     * @param orderNum 显示顺序
     * @return 影响行数
     */
    int updateSubsystemOrder(@Param("systemCode") String systemCode, @Param("orderNum") Integer orderNum);
    
    /**
     * 删除子系统
     *
     * @param systemCode 系统编码
     * @return 影响行数
     */
    int deleteSubsystemByCode(String systemCode);
    
    /**
     * 批量删除子系统
     *
     * @param systemCodes 系统编码数组
     * @return 影响行数
     */
    int deleteSubsystemByCodes(String[] systemCodes);
    
    /**
     * 获取子系统数量统计
     *
     * @return 子系统数量
     */
    int selectSubsystemTotalCount();
    
    /**
     * 获取启用状态的子系统数量
     *
     * @return 启用状态的子系统数量
     */
    int selectActiveSubsystemCount();
} 